package org.sean.framework.web.converter;

import org.sean.framework.code.StatusInfo;

/**
 * Response Body Converter
 *
 * @param <T> T
 * @author xielei
 */
public interface BaseResponseBodyConverter<T> {

    /**
     * 转换响应结构体
     *
     * @param body       原始数据
     * @param statusInfo 状态信息
     * @return 响应
     */
    default T convertResponseBody(Object body, StatusInfo statusInfo) {
        T result;
        if (statusInfo == null) {
            result = convert(body);
        } else {
            result = handleStatus(statusInfo);
        }
        return result;
    }

    /**
     * 转换响应数据
     *
     * @param body 响应数据
     * @return 返回数据
     */
    T convert(Object body);

    /**
     * 处理异常信息
     *
     * @param statusInfo 异常信息
     * @return 返回数据
     */
    T handleStatus(StatusInfo statusInfo);

}
